home *** CD-ROM | disk | FTP | other *** search
- /******************************************************************************\
-
- Module: IRS_Geometry.c
-
- Purpose: plug-in renderer for QD3D: geometry rendering
-
- Author: Sun-Inn Shih
-
- Copyright (C) 1993-96 Apple Computer, Inc. All rights reserved.
-
- \*****************************************************************************/
- #include <QD3D.h>
- #include <QD3DGeometry.h>
-
- #include "IRS_Geometry.h"
-
- /*
- * IRS_Geometry_Triangle
- */
- TQ3Status IRS_Geometry_Triangle(
- TQ3ViewObject pView,
- irsData *irsdata,
- TQ3GeometryObject pGeom,
- TQ3TriangleData *pTriangleData)
- {
- TQ3Point3D point3D;
- TQ3Point2D point2D[3];
-
- float w;
- float scale = irsdata->scale;
- float center = irsdata->center;
- long j;
-
- /* local to Frustum */
- float M00, M01, M02, M03;
- float M10, M11, M12, M13;
- float M20, M21, M22, M23;
- float M30, M31, M32, M33;
-
- M00 = irsdata->localToFrustum.value[0][0];
- M01 = irsdata->localToFrustum.value[0][1];
- M02 = irsdata->localToFrustum.value[0][2];
- M03 = irsdata->localToFrustum.value[0][3];
-
- M10 = irsdata->localToFrustum.value[1][0];
- M11 = irsdata->localToFrustum.value[1][1];
- M12 = irsdata->localToFrustum.value[1][2];
- M13 = irsdata->localToFrustum.value[1][3];
-
- M20 = irsdata->localToFrustum.value[2][0];
- M21 = irsdata->localToFrustum.value[2][1];
- M22 = irsdata->localToFrustum.value[2][2];
- M23 = irsdata->localToFrustum.value[2][3];
-
- M30 = irsdata->localToFrustum.value[3][0];
- M31 = irsdata->localToFrustum.value[3][1];
- M32 = irsdata->localToFrustum.value[3][2];
- M33 = irsdata->localToFrustum.value[3][3];
-
- /* trimesh data */
- scale = irsdata->scale;
- center = irsdata->center;
-
- for( j = 0 ; j < 3 ; j ++)
- {
- point3D = pTriangleData->vertices[j].point;
-
- point2D[j].x = point3D.x * M00 + point3D.y * M10 + point3D.z * M20 + M30;
- point2D[j].y = point3D.x * M01 + point3D.y * M11 + point3D.z * M21 + M31;
- w = point3D.x * M03 + point3D.y * M13 + point3D.z * M23 + M33;
-
- point2D[j].x = ( point2D[j].x / w ) * scale + center;
- point2D[j].y = ( point2D[j].y / w ) * scale + center;
- }
-
- fprintf(irsdata->filePtr, "%d %d moveto ", (long) point2D[0].x, (long) point2D[0].y);
- fprintf(irsdata->filePtr, "%d %d lineto ", (long) point2D[1].x, (long) point2D[1].y);
- fprintf(irsdata->filePtr, "%d %d lineto ", (long) point2D[2].x, (long) point2D[2].y);
- fprintf(irsdata->filePtr, "closepath\n" );
-
- return kQ3Success;
- }
-
- /*
- * IRS_Geometry_Line
- */
- TQ3Status IRS_Geometry_Line(
- TQ3ViewObject pView,
- irsData *irsdata,
- TQ3GeometryObject pGeom,
- TQ3LineData *pLineData)
- {
- return kQ3Success;
- }
-
- /*
- * IRS_Geometry_Point
- */
- TQ3Status IRS_Geometry_Point(
- TQ3ViewObject pView,
- irsData *irsdata,
- TQ3GeometryObject pGeom,
- TQ3PointData *pPointData)
- {
- return kQ3Success;
- }
-
- /*
- * IRS_Geometry_Marker
- */
- TQ3Status IRS_Geometry_Marker(
- TQ3ViewObject pView,
- irsData *irsdata,
- TQ3GeometryObject pGeom,
- TQ3MarkerData *pMarkerData)
- {
- return kQ3Success;
- }
-
- /*
- * IRS_Geometry_PixmapMarker
- */
- TQ3Status IRS_Geometry_PixmapMarker(
- TQ3ViewObject pView,
- irsData *irsdata,
- TQ3GeometryObject pGeom,
- TQ3PixmapMarkerData *pPixmapMarkerData)
- {
- return kQ3Success;
- }
-
- #if 0
- /*
- * IRS_Geometry_TM
- */
- TQ3Status IRS_Geometry_TM(
- TQ3ViewObject pView,
- irsData *irsdata,
- TQ3GeometryObject pGeom,
- TQ3TriMeshData *pTriMeshData)
- {
- /* QD3D structures */
- TQ3TriMeshTriangleData *trianglelist;
- TQ3Point3D point3D, *pointlist;
- TQ3Point2D point2D[3];
-
- float w;
- float scale = irsdata->scale;
- float center = irsdata->center;
- long i, j, index;
-
- /* local to Frustum */
- float M00, M01, M02, M03;
- float M10, M11, M12, M13;
- float M20, M21, M22, M23;
- float M30, M31, M32, M33;
-
- M00 = irsdata->localToFrustum.value[0][0];
- M01 = irsdata->localToFrustum.value[0][1];
- M02 = irsdata->localToFrustum.value[0][2];
- M03 = irsdata->localToFrustum.value[0][3];
-
- M10 = irsdata->localToFrustum.value[1][0];
- M11 = irsdata->localToFrustum.value[1][1];
- M12 = irsdata->localToFrustum.value[1][2];
- M13 = irsdata->localToFrustum.value[1][3];
-
- M20 = irsdata->localToFrustum.value[2][0];
- M21 = irsdata->localToFrustum.value[2][1];
- M22 = irsdata->localToFrustum.value[2][2];
- M23 = irsdata->localToFrustum.value[2][3];
-
- M30 = irsdata->localToFrustum.value[3][0];
- M31 = irsdata->localToFrustum.value[3][1];
- M32 = irsdata->localToFrustum.value[3][2];
- M33 = irsdata->localToFrustum.value[3][3];
-
- /* trimesh data */
- trianglelist = pTriMeshData->triangles;
- pointlist = pTriMeshData->points;
-
- scale = irsdata->scale;
- center = irsdata->center;
-
- for(i=0;i<pTriMeshData->numTriangles; i++, trianglelist++)
- {
- for( j = 0 ; j < 3 ; j ++)
- {
- index = trianglelist->pointIndices[j];
- point3D = pointlist[index];
-
- point2D[j].x = point3D.x * M00 + point3D.y * M10 + point3D.z * M20 + M30;
- point2D[j].y = point3D.x * M01 + point3D.y * M11 + point3D.z * M21 + M31;
- w = point3D.x * M03 + point3D.y * M13 + point3D.z * M23 + M33;
-
- point2D[j].x = ( point2D[j].x / w ) * scale + center;
- point2D[j].y = ( point2D[j].y / w ) * scale + center;
- }
-
- fprintf(irsdata->filePtr, "%d %d moveto ", (long) point2D[0].x, (long) point2D[0].y);
- fprintf(irsdata->filePtr, "%d %d lineto ", (long) point2D[1].x, (long) point2D[1].y);
- fprintf(irsdata->filePtr, "%d %d lineto ", (long) point2D[2].x, (long) point2D[2].y);
- fprintf(irsdata->filePtr, "closepath\n" );
- }
-
- return kQ3Success;
- }
- #endif
-